#include"../server.hpp"

// int main()
// {
//     Socket lst_sock;
//     lst_sock.CreateServer(8500);
//     while(1){
//         int newfd = lst_sock.Accept();
//         if(newfd<0)continue;
//         Socket cli_sock(newfd);
//         char buf[1024]={0};
//         int ret = cli_sock.Recv(buf,1023);
//         if(ret<0)
//         {
//             cli_sock.Close();
//             continue;
//         }
//         cli_sock.Send(buf,ret);
//         cli_sock.Close();
//     }
//     lst_sock.Close();
//     return 0;
// }
// void HandleRead(Channel*channel){
//     int fd = channel->Fd();
//     char buf[1024]={0};
//     int ret = recv(fd,buf,1023,0);
//     if(ret<0){
//         return HandleClose(channel);
//     }
//     std::cout<<buf<<std::endl;
//     channel->EnableWrite();
// }
// void HandleWrite(Channel*channel){
//     int fd = channel->Fd();
//     const char* data = "今天天气不错";
//     int ret = send(fd,data,strlen(data),0);
//     if(ret<0)
//         return HandleClose(channel);
//     channel->DisableWrite();
// }
// void HandleClose(Channel*channel){
//     std::cout<<"close:"<<channel->Fd()<<std::endl;
//     channel->Remove();
//     delete channel;
// }
// void HandleError(Channel*channel){
//     return HandleClose(channel);
// }
// void HandleEvent(Channel*channel){
//     std::cout<<"有一个事件"<<std::endl;
// }
// void Acceptor(Poller * poller,Channel* lst_channel){
//     int fd = lst_channel->Fd();
    
//     //accept()返回的客户端连接的文件描述符
//     int newfd  = accept(fd,NULL,NULL);
//     if(newfd<0){return;}
//     //为这个具体的客户端连接创建专门的管理对象
//     Channel *channel = new Channel(poller,newfd);

//     //告诉这个Channel各种事件发生时该调用什么函数
//     channel->SetReadCallback(std::bind(HandleRead,channel));
//     channel->SetWriteCallback(std::bind(HandleWrite,channel));
//     channel->SetCloseCallback(std::bind(HandleClose,channel));
//     channel->SetErrorCallback(std::bind(HandleError,channel));
//     channel->SetEventCallback(std::bind(HandleEvent,channel));

// }
// int main()
// {
//     Poller poller;
//     //创建套接字
//     Socket _lst_scock;
//     //创建服务端
//     _lst_scock.CreateServer(8500);
//     //为监听套接字创建一个Channel进行事件管理、处理
//     Channel channel(&poller,_lst_scock.Fd());
//     //有可读事件调回调函数并传入两个参数
//     channel.SetReadCallback(std::bind(Acceptor,&poller,&channel));
//     channel.EnableRead();//启动可读事件监控
//     while(1){
//         std::vector<Channel*>actives;
//         poller.Poll(&actives);
//         for(auto &a:actives)
//         {
//             a->HandleEvent();
//         }
//     }
//     _lst_scock.Close();
//     return 0;
// }